package com.dragon.modules.yuegou.service.product;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.product.SkuEntity;
import com.dragon.modules.yuegou.enums.product.SpuShowModule;
import com.dragon.modules.yuegou.model.product.GoodsInfo;
import com.dragon.modules.yuegou.model.product.Information;
import com.dragon.modules.yuegou.model.product.PackageDetail;
import com.dragon.modules.yuegou.model.product.PosterAppInfo;
import com.dragon.modules.yuegou.model.product.Sku;
import com.dragon.modules.yuegou.model.product.Spu;
import com.dragon.modules.yuegou.query.order.OrderDetailQuery;
import com.dragon.modules.yuegou.query.product.SkuQuery;
import com.dragon.modules.yuegou.query.product.SpuQuery;

import java.math.BigDecimal;
import java.util.List;

/**
 * SKU 服务接口
 *
 * @author px
 * @date 2019-05-11 14:20:32
 * @version 2.0
 */
public interface SkuService extends IService<SkuEntity> {

	/**
	 * 列出可以售卖的SKU详情列表
	 *
	 * @param skuIds SKU ID列表，如果其中有不可售卖的SKU（例如已下架、已过期）则抛出异常
	 * @return SKU列表（携带SPU信息）
	 */
	List<Sku> listSaleable(List<String> skuIds, boolean shelves);

	/**
	 * 新增sku信息
	 *
	 * @param spu
	 */
	Sku saveSku(Spu spu);

	/**
	 * 修改sku信息
	 *
	 * @param spu
	 */
	void modifySku(Spu spu);

	/**
	 * Sku列表查询
	 */
	List<Sku> searchSku(String spuId);

	/**
	 * 首页悦卡列表
	 *
	 * @param busdId
	 */
	List<Sku> findCardSkuList(String busdId, PageRequest page);

	/**
	 * 首页优质好货列表
	 *
	 * @param busdId
	 */
	List<Sku> findSkuList(String busdId, PageRequest page);

	/**
	 * 积分商城列表
	 *
	 * @param busdId
	 * @param categoryId
	 * @param page
	 * @return
	 */
	List<Sku> findPointsList(String busdId, String categoryId, PageRequest page);

	/**
	 * 商品详情
	 *
	 * @param skuId
	 * @return
	 */
	Sku getSkuDetail(String skuId);

	/**
	 * 商品缓存
	 *
	 * @param id
	 * @return
	 */
	Sku getCashById(String id);

	/**
	 * 套餐商品详情
	 *
	 * @param skuId
	 * @return
	 */
	Sku getPackage(String skuId);

	/**
	 * 停车券类型
	 *
	 * @return
	 */
	List<Sku> parkcouponType();

	/**
	 * 商户优惠券类型
	 *
	 * @return
	 */
	List<Sku> merchantCoupon(String busdId);

	/**
	 * 根据名字查询sku列表
	 */
	List<Sku> nameSku(String skuName);

	/**
	 * 其他可购买悦卡列表
	 *
	 * @param skuId
	 * @param busdId
	 * @param page
	 * @return
	 */
	List<Sku> otherCardList(String skuId, String busdId, PageRequest page);

	/**
	 * 计算套餐原价
	 *
	 * @param list
	 * @return
	 */
	BigDecimal countPackagePrice(List<Sku> list);

	/**
	 * 抽奖活动商品sku列表
	 *
	 * @param busdId
	 * @param title
	 * @return
	 */
	List<Sku> activitySkuList(String busdId, String title);

	/**
	 * 活动商品sku列表
	 */
	List<Sku> skuListBySpuQuery(SpuQuery query);

	String getSkuSharePosters(String skuId, String appid, PosterAppInfo info, String memberId);

	String integralExchangeposters(String cardId, String appid, PosterAppInfo info, String memberId);

	String covAttrsStr(String attrsStr);

	List<PackageDetail> getPackageDetail(OrderDetailQuery query);

	GoodsInfo getGoodsInfoBySkuId(String skuId);

	/**
	 * 获取商品的模板ID
	 *
	 * @param skuId
	 * @return
	 */
	String getTemplateId(String skuId);

	/**
	 * 查询特殊商品列表
	 */
	IPage<Sku> spuList(PageRequest page, String title, SpuShowModule showModule);

	/**
	 * 查询到家商品详情
	 *
	 * @param spuId
	 * @return
	 */
	List<Sku> searchCommodityInfo(String spuId);

	/**
	 * 查询商品活动信息
	 */
	Information information(String skuId, String orderNo);

	/**
	 * 根据条件查询已下架的sku
	 *
	 * @param skuQuery
	 * @return
	 */
	IPage<Sku> lowerPage(PageRequest page, SkuQuery skuQuery);
}